package com.huawei.M01.iterator.july;

import java.util.ArrayList;
import java.util.List;

/**
 * 功能：子集
 *
 * @author zhiwu
 * @Data 2023/7/13 0:58
 */
public class SubSet {

    private static List<List<Integer>> ans;
    private static int n;

    private static List<Integer> choose;

    public List<List<Integer>> subsets(int[] nums) {
        ans = new ArrayList<>();
        n = nums.length;
        choose = new ArrayList<>();
        recurse(nums, 0);
        return ans;
    }

    private void recurse(int[] nums, int i) {
        // 递归头
        if (i == n) {
            // 更新结果，返回
            ans.add(new ArrayList<>(choose));
            return;
        }

        // 处理当前level的数据 --> 可以选择当前位置的数据，也可以不选择
        recurse(nums, i + 1);
        // 选择当前周期的数据
        choose.add(nums[i]);
        // 递归下一个层次
        recurse(nums, i + 1);
        // 还原现场,当然此处还可以选择删除最后一个元素
        choose.remove(choose.size() - 1);
    }

}
